﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NHibernate;
using NHibernate.Cfg;


namespace ThorMVR
{
    public partial class fCadContador : Form
    {
        public fCadContador()
        {
            InitializeComponent();
            this.MaximizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;
            
        }

        private void verificarConfiguraçãoDePastaToolStripMenuItem_Click(object sender, EventArgs e)
        {
         
        }

        private void fCadContador_Load(object sender, EventArgs e)
        {
            tabControl1.Enabled = false;           
        }

        private void label8_Click(object sender, EventArgs e)
        {

        }

        private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e)
        {
            
        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox24_TextChanged(object sender, EventArgs e)
        {

        }

        private void tabPage2_Click(object sender, EventArgs e)
        {

        }

        private void maskedTextBox2_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {

        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fCadContador.ActiveForm.Close();
        }

        private void imprimirListagemToolStripMenuItem_Click(object sender, EventArgs e)
        {
           

        }

        private void btn_Incluir_Click(object sender, EventArgs e)
        {
            tabControl1.Enabled = true;
            clear();
        }

        private void clear()
        {
            txt_numerodocodigo.Clear();
            txt_nomedocodigo.Clear();
            txt_nomedocontador.Clear();
            txt_nomeapelido.Clear();
            rb_Fisica.Checked = false;
            rb_Juridica.Checked = false;
            txt_cpfoucnpj.Clear();
            txt_numerodocrc.Clear();
            txt_logradouro.Clear();
            txt_endereco.Clear();
            txt_endereco.Clear();
            txt_numerodoendereco.Clear();
            txt_complemento.Clear();
            txt_bairro.Clear();
            txt_uf.Clear();
            txt_cep.Clear();
            txt_municipio.Clear();
            txt_dddtelefone.Clear();
            txt_numerodotelefone.Clear();
            txt_dddfax.Clear();
            txt_numerodofax.Clear();
            txt_codigomunicipio.Clear();
            txt_categoria.Clear();
            txt_cfdf.Clear();
            cb_TipoContabilista.ResetText();
            txt_municipio.Clear();
            txt_email.Clear();
            txt_numerorg.Clear();
            txt_orgaoemissorrg.Clear();
            txt_dataemissaorg.Clear();
            txt_uf.Clear();
            
        }


        private void btn_Salvar_Click(object sender, EventArgs e)
        {
            int id;
            if (txt_numerodocodigo.Text == "")
            {
                MessageBox.Show("Campo de codigo em branco!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if ((rb_Fisica.Checked == false) && (rb_Juridica.Checked == false))
                {
                    MessageBox.Show("Personalidade não selecionada!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {

                    Boolean b = Int32.TryParse(txt_numerodocodigo.Text, out id);
                    if (b)
                    {
                        #region Setters das text's box para as variaveis
                        String nomeCompleto = txt_nomedocontador.Text;
                        String apelido = txt_nomeapelido.Text;
                        Boolean personaJuridica = false;
                        if (rb_Juridica.Checked)
                        {
                            personaJuridica = true;
                        }
                        Boolean personaFisica = false;
                        if (rb_Fisica.Checked)
                        {
                            personaFisica = true;
                        }
                        String cpf_cnpj = txt_cpfoucnpj.Text;
                        String crc = txt_numerodocrc.Text;
                        String logradouro = txt_logradouro.Text;
                        String endereco = txt_endereco.Text;
                        String numero = txt_numerodoendereco.Text;
                        String complemento = txt_complemento.Text;
                        String bairro = txt_bairro.Text;
                        String uf = txt_uf.Text;
                        String cep = txt_cep.Text;
                        String municipio = txt_municipio.Text;
                        int tel_ddd = Int32.Parse(txt_dddtelefone.Text);
                        String tel_principal = txt_numerodotelefone.Text;
                        int fax_ddd = Int32.Parse(txt_dddfax.Text);
                        String fax_principal = txt_numerodofax.Text;
                        int cod_municipio = Int32.Parse(txt_codigomunicipio.Text);
                        String categoria = txt_categoria.Text;
                        String cf_df = txt_cfdf.Text;
                        String tipo_contabilista = cb_TipoContabilista.Text;
                        String email = txt_email.Text;
                        String rg_numero = txt_numerorg.Text;
                        String rg_orgao = txt_orgaoemissorrg.Text;
                        String rg_dataemissao = txt_dataemissaorg.Text;
                        String rg_uf = txt_uf.Text;

                        #endregion

                        ClassModels.GeralContadores contadoresBean = new ClassModels.GeralContadores();

                        #region Persistencia no Bean
                        contadoresBean.id = id;
                        contadoresBean.nomeCompleto = nomeCompleto.ToUpper();
                        contadoresBean.apelido = apelido.ToUpper();
                        if (personaFisica)
                        {
                            contadoresBean.personalidade = "FISICA";
                        }
                        if (personaJuridica)
                        {
                            contadoresBean.personalidade = "JURIDICA";
                        }
                        contadoresBean.cpf_cnpj = cpf_cnpj;
                        contadoresBean.crc = crc;
                        contadoresBean.logradouro = logradouro.ToUpper();
                        contadoresBean.endereco = endereco.ToUpper();
                        contadoresBean.numero = numero.ToUpper();
                        contadoresBean.complemento = complemento.ToUpper();
                        contadoresBean.bairro = bairro.ToUpper();
                        contadoresBean.uf = uf.ToUpper();
                        contadoresBean.cep = cep.ToUpper();
                        contadoresBean.municipio = municipio.ToUpper();
                        contadoresBean.tel_ddd = tel_ddd;
                        contadoresBean.tel_principal = tel_principal.ToUpper();
                        contadoresBean.fax_ddd = fax_ddd;
                        contadoresBean.fax_principal = fax_principal.ToUpper();
                        contadoresBean.cod_municipio = cod_municipio;
                        contadoresBean.categoria = categoria.ToUpper();
                        contadoresBean.cf_df = cf_df.ToUpper();
                        contadoresBean.tipo_contabilista = tipo_contabilista.ToUpper();
                        contadoresBean.email = email.ToUpper();
                        contadoresBean.rg_numero = rg_numero.ToUpper();
                        contadoresBean.rg_orgao = rg_orgao.ToUpper();
                        contadoresBean.rg_dataEmissao = rg_dataemissao.ToUpper();
                        contadoresBean.rg_uf = rg_uf.ToUpper();

                        #endregion

                        using (ISession session = ClassModels.NHibernateHelper.GetCurrentSession())
                        {

                            using (ITransaction transaction = session.BeginTransaction())
                            {
                                session.SaveOrUpdate(contadoresBean);
                                session.BeginTransaction().Commit();
                                clear();
                                MessageBox.Show("O contador " + contadoresBean.nomeCompleto.ToString().ToUpper() + " foi cadastrado com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                tabControl1.Enabled = false;

                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Somente são aceitos números no campo de código!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txt_numerodocodigo.Clear();

                    }
                }
            }
        }

        private void txt_numerodocodigo_TextChanged(object sender, EventArgs e)
        {
            tabControl1.Enabled = false;
            int userid;
            if(txt_numerodocodigo.Text == "")
            {
                clear();
            }
            Boolean b = Int32.TryParse(txt_numerodocodigo.Text, out userid);
            if (b)
            {
                ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

                IQuery query = session.CreateQuery("FROM GeralContadores WHERE id=:id");

                query.SetString("id", userid.ToString());

                IList<ClassModels.GeralContadores> acc = query.List<ClassModels.GeralContadores>();

                session.Close();

                if (acc.Count != 0)
                {
                    txt_nomedocodigo.Text = acc[0].apelido;
                    txt_nomedocontador.Text = acc[0].nomeCompleto;
                    txt_nomeapelido.Text = acc[0].apelido;
                    switch (acc[0].personalidade)
                    {
                        case "FISICA":
                            rb_Fisica.Checked = true;
                            txt_cpfoucnpj.Mask = "###.###.###-##";
                            txt_cpfoucnpj.Text = acc[0].cpf_cnpj;
                            break;
                        case "JURIDICA":
                            rb_Juridica.Checked = true;
                            txt_cpfoucnpj.Mask = "##.###.###/####-##";
                            txt_cpfoucnpj.Text = acc[0].cpf_cnpj;
                            break;
                    }
                    txt_numerodocrc.Text = acc[0].crc;
                    txt_logradouro.Text = acc[0].logradouro;
                    txt_endereco.Text = acc[0].endereco;
                    txt_numerodoendereco.Text = acc[0].numero;
                    txt_complemento.Text = acc[0].complemento;
                    txt_bairro.Text = acc[0].bairro;
                    txt_uf.Text = acc[0].uf;
                    txt_cep.Text = acc[0].cep;
                    txt_municipio.Text = acc[0].municipio;
                    txt_dddtelefone.Text = acc[0].tel_ddd.ToString();
                    txt_numerodotelefone.Text = acc[0].tel_principal;
                    txt_dddfax.Text = acc[0].fax_ddd.ToString();
                    txt_numerodofax.Text = acc[0].fax_principal;
                    txt_codigomunicipio.Text = acc[0].cod_municipio.ToString();
                    txt_categoria.Text = acc[0].categoria;
                    txt_cfdf.Text = acc[0].cf_df;
                    cb_TipoContabilista.Text = acc[0].tipo_contabilista;
                    txt_email.Text = acc[0].email;
                    txt_numerorg.Text = acc[0].rg_numero;
                    txt_orgaoemissorrg.Text = acc[0].rg_orgao;
                    txt_dataemissaorg.Text = acc[0].rg_dataEmissao;
                    txt_ufrg.Text = acc[0].rg_uf;

                }
                else
                {
                    txt_nomedocodigo.Text = "Usuario não cadastrado";

                }

            }
             
        }


        private void rb_Juridica_CheckedChanged(object sender, EventArgs e)
        {
            if (rb_Juridica.Checked)
            {
                txt_cpfoucnpj.Clear();
                txt_cpfoucnpj.Mask = "##.###.###/####-##";
                
            }

        }

        private void rb_Fisica_CheckedChanged(object sender, EventArgs e)
        {
            if (rb_Fisica.Checked)
            {
                txt_cpfoucnpj.Clear();
                txt_cpfoucnpj.Mask = "###.###.###-##";
                
            }
        }

        private void btn_Alterar_Click(object sender, EventArgs e)
        {
            tabControl1.Enabled = true;
        }

        private void btn_Excluir_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("Tem certeza que deseja excluir este registro?", "Erro!", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            if (dr == System.Windows.Forms.DialogResult.OK)
            {

                tabControl1.Enabled = false;
                int userid;
                if (txt_numerodocodigo.Text == "")
                {
                    clear();
                }
                Boolean b = Int32.TryParse(txt_numerodocodigo.Text, out userid);
                if (b)
                {
                    ISession session = ClassModels.NHibernateHelper.GetCurrentSession();

                    IQuery query = session.CreateQuery("FROM GeralContadores WHERE id=:id");

                    query.SetString("id", userid.ToString());

                    IList<ClassModels.GeralContadores> acc = query.List<ClassModels.GeralContadores>();

                    ClassModels.GeralContadores contadoresBean = new ClassModels.GeralContadores();

                    if (acc.Count != 0)
                    {
                        contadoresBean = acc[0];
                    }

                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        if (acc.Count != 0)
                        {
                            session.Delete(contadoresBean);
                            session.BeginTransaction().Commit();
                            clear();
                            tabControl1.Enabled = false;
                        }
                    }

                }
            }

        }

        private void txt_email_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
